/*@author cerimice*/
package Persistencia.Fachada;

import Persistencia.Definicion.Apartado;
import Persistencia.Definicion.SeguimientoApartado;
import java.util.Date;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.Persistence;

public class ApartadoFachada
    {
     private EntityManager  em;
     private String         claveApartado;
    
    public ApartadoFachada()
        {}
    
    public String getClaveApartado()
        {return claveApartado;}
    
    private EntityManager getEntityManager()
        {return Persistence.createEntityManagerFactory(Sistema.Configuracion.getUnidadDePersistencia()).createEntityManager();}                
    
    public boolean agregar(String cliente,Date fechaInicio,Date fechaTermino,String descripcion,String marca,String numeroSerie,float montoTotal) throws Exception
        {
        try
            {
            em = getEntityManager();
            em.getTransaction().begin();
                Apartado obj = new Apartado();
                obj.setCliente(cliente);
                obj.setFechaInicio(fechaInicio);
                obj.setFechaTermino(fechaTermino);
                obj.setDescripcion(descripcion);
                obj.setMarca(marca);
                obj.setNumeroSerie(numeroSerie);
                obj.setMontoTotal(montoTotal);
            em.persist(obj);
            em.flush();
            em.getTransaction().commit();
            em.close();
            claveApartado = obj.getClave();
            return true;
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Sistema.Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public boolean agregar(String cliente,Date fechaInicio,Date fechaTermino,String descripcion,String marca,String numeroSerie,float montoTotal,float pagoInicial) throws Exception
        {
        try
            {
            SeguimientoApartadoFachada objFachada = new SeguimientoApartadoFachada();
            SeguimientoApartado objSeguimiento = new SeguimientoApartado();
            
            em = getEntityManager();
            em.getTransaction().begin();
                Apartado obj = new Apartado();
                obj.setCliente(cliente);
                obj.setFechaInicio(fechaInicio);
                obj.setFechaTermino(fechaTermino);
                obj.setDescripcion(descripcion);
                obj.setMarca(marca);
                obj.setNumeroSerie(numeroSerie);
                obj.setMontoTotal(montoTotal);
                em.persist(obj);
            
                objSeguimiento.setApartdo(obj.getClave());
                objSeguimiento.setFecha(fechaInicio);
                objSeguimiento.setComentario("PRIMER PAGO");
                objSeguimiento.setMonto(pagoInicial);
                em.persist(objSeguimiento);
            em.flush();
            em.getTransaction().commit();
            em.close();
            claveApartado = obj.getClave();
            return true;
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Sistema.Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public boolean modificar(String clave,String cliente,Date fechaInicio,Date fechaTermino,String descripcion,String marca,String numeroSerie,float montoTotal) throws Exception
        {
        try
            {
            em = getEntityManager();
            em.getTransaction().begin();
                Apartado obj = em.find(Apartado.class,clave);
                if(obj == null){return false;}
                obj.setCliente(cliente);
                obj.setFechaInicio(fechaInicio);
                obj.setFechaTermino(fechaTermino);
                obj.setDescripcion(descripcion);
                obj.setMarca(marca);
                obj.setNumeroSerie(numeroSerie);
                obj.setMontoTotal(montoTotal);
            em.persist(obj);
            em.flush();
            em.getTransaction().commit();
            em.close();
            return true;
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Sistema.Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }
    
    public Apartado obtener(String clave) throws Exception
        {
        try
            {
            em = getEntityManager();
            em.getTransaction().begin();
            Apartado obj = em.find(Apartado.class,clave);
            em.getTransaction().commit();
            em.close();
            return obj;
            }
        catch(Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Sistema.Configuracion.nivelLoggin(),Ex.getMessage()); throw Ex;}
        }    
    }
